package com.example.administrator.basedemos.dagger2.moudle;

import android.content.Context;

import com.example.administrator.basedemos.dagger2.Apiservice;
import com.example.administrator.basedemos.dagger2.UserStore;
import com.example.administrator.basedemos.dagger2.annotation.AcitivityScope;
import com.example.administrator.basedemos.dagger2.annotation.Dev;
import com.example.administrator.basedemos.dagger2.annotation.Release;
import com.example.administrator.basedemos.utils.LogUtil;

import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;

/**
 * 创建者     ZCL
 * 创建时间   2018/3/23 16:37
 * 描述	      ${}
 * <p>
 * 更新者     $Author$
 * 更新时间   $Date$
 * 更新描述   ${TODO}
 */
//@Module(includes =  {HttpMoudle.class})// 模块化第一种方式
@Module
public class UserMoudle {
    private static final String TAG = "Dagger2";
    private final Context mContext;

    public UserMoudle(Context context) {
        this.mContext = context;
    }

    //因为userStore构造方法需要参数 所以不能inject只能通过provide使用moudle的context
    @Provides
    public UserStore proviUserStore() {
        return new UserStore(mContext);
    }

    //因为userStore构造方法需要okhttp 所以不能inject只能通过provide使用moudle的context
    @AcitivityScope
    @Provides
    @Dev
    public Apiservice provideApiserviceRelease(OkHttpClient client) {
        Apiservice apiservice = new Apiservice(client);
        LogUtil.util(TAG, "dev:" + apiservice);
        return apiservice;
    }

    @Provides
    @Release
    public Apiservice provideApiserviceDev(OkHttpClient client) {
        Apiservice apiservice = new Apiservice(client);
        LogUtil.util(TAG, "release:" + apiservice);
        return apiservice;
    }

/*    @Provides
    public UserManger proviUserManger(Apiservice apiservice, UserStore userStore){
        return  new UserManger(apiservice,userStore);
    }*/


    //  1. 使用provide提供对象  2.对象的构造方法设置为inject自行调用
    //    @Provides
    //    public Apiservice provideApiservice(){
    //        LogUtil.util(TAG,"provide: apisercvice");
    //        return  new Apiservice();
    //    }
    //  因为对象构造方法里面有一个url所以我们要给他提供出来
    //    @Provides
    //    public String provideStringUrl(){
    //        LogUtil.util(TAG,"url:");
    //        return "http://www.zcl.com";
    //    }
}
